#include "ListaDeNodosOrdenados.h"
#include <iostream>
#include <cstring>

using namespace std;

ListaDeNodosOrdenados::ListaDeNodosOrdenados() {
	this->cantidadMaxima = 513;
	this->cantidadActual = 0;
	memset(nodos, 0, 513);
}

ListaDeNodosOrdenados::~ListaDeNodosOrdenados() {
	for (unsigned int i = 0; i < this->cantidadActual; i++) {
		delete nodos[i];
	}
}

// Agrega el nodo en orden
void ListaDeNodosOrdenados::agregarNodo(NodoArbolHuffman* nodo) {
	this->nodos[cantidadActual] = nodo;
	this->cantidadActual++;
}

NodoArbolHuffman* ListaDeNodosOrdenados::buscarMaxEnBloque(NodoArbolHuffman* nodo) {
	int i = 513 - nodo->numero;
	int frecuencia = nodo->frecuencia;
	if (i > 0) {
		// Acá importa el orden de la comparacion
		do {
			i--;
		} while (i >= 0 && nodos[i]->frecuencia == frecuencia);
		return nodos[i+1];
	}
	return nodo;
}

// Intercambia dos nodos
void ListaDeNodosOrdenados::intercambiarNodos(unsigned int numeroNodoActual, unsigned int numeroNodoMax) {
	NodoArbolHuffman* nodoTemp = nodos[513-numeroNodoActual];
	nodos[513-numeroNodoActual] = nodos[513-numeroNodoMax];
	nodos[513-numeroNodoMax] = nodoTemp;

	// No tengo idea si esto funciona
	nodoTemp = 0;
	delete nodoTemp;
}
